// pages/shop/shop.js
const camp = require("../../api/camp");
const goods = require("../../api/goods");
const {
  baseURL
} = require("../../utils/request");

Page({
  /**
   * 页面的初始数据
   */
  data: {
    activeKey: 0,
    campList: [],
    goodsList: [],
    baseURL: baseURL,
    cartList: [],
    showPopup: false, // 控制弹出层的显示状态
    showCart: false, // 控制弹出层的显示状态
    cartLength: 0,
    amount: 0,
    campId: "",
    latitude: null,
    longitude: null,
    address: null,
    qrCode: '' // 用于存储二维码图片的URL
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.getAddress();
    const userInfo = wx.getStorageSync('userInfo');
    this.setData({
      userId: userInfo.userId // 初始化 userId
    });
    console.log("wx.getStorageInfoSync(userInfo)", wx.getStorageSync('userInfo'))
    this.getAppointmentCampList();

  },


  getAppointmentCampList() {
    camp.getAppointmentByUserid(wx.getStorageSync("userInfo").userId).then(res => {
      console.log(res)
      if (res.code == 200) {
        this.setData({
          campList: res.data
        })
      }
      // 去重处理
      this.uniqueCampList();
      if (res.data.length <= 0) {
        return;
      }
      this.setData({
        campId: res.data[0].campId
      })
      let campId = res.data[0].campId
      this.getGoods(campId);
    })

  },
  uniqueCampList() {
    const unique = [...new Map(this.data.campList.map(item => [item.campId, item])).values()];
    this.setData({
      campList: unique
    });
  },
  // 当左侧营地切换时触发
  onChange(event) {
    console.log("onChange event", event);
    this.setData({
      campId: this.data.campList[event.detail].campId
    })
    let campId = this.data.campList[event.detail].campId
    this.setCartList();
    this.getGoods(campId);
  },
  // 根据营地id查询商品
  getGoods(campId) {
    goods.goodsList({
      campId: campId,
    }).then(res => {
      console.log("goodsList", res)
      if (res.code == 200 && Array.isArray(res.rows)) {
        var _goodsList = res.rows.map(item => ({
          ...item,
          num: 0,
          userId: this.data.userId // 使用页面数据中的 userId
        }));
        console.log("_goodsList", _goodsList)
        this.setData({
          goodsList: _goodsList
        })
        // 根据购物车缓存数据，调整商品右下角下标
        this.setCartList();
      }
    })
  },

  // 从本地存储中查询购物车数据
  setCartList() {
    var cartList = wx.getStorageSync('cartList-' + this.data.campId)
    if (cartList && cartList.length > 0) {
      this.setData({
        cartList: cartList
      })
    } else {
      this.setData({
        cartList: []
      })
    }
    this.sumAmount();
    this.setGoodsNum();
  },
  // 设置商品已经加入购物车的数量
  setGoodsNum() {

    var cartList = this.data.cartList;
    var goodsList = this.data.goodsList;
    for (let i = 0; i < cartList.length; i++) {
      const cartItem = cartList[i];
      for (let j = 0; j < goodsList.length; j++) {
        const goodsItem = goodsList[j];
        if (cartItem.goodsId == goodsItem.goodsId) {
          goodsList[j].num = cartItem.num;
          break;
        }
      }
    }
    this.setData({
      goodsList: goodsList
    })
  },
  // 当在商品数量变化时
  onStepperChange(event) {
    console.log("onStepperChange event", event);
    let index = event.currentTarget.dataset.index;
    var goodsList = this.data.goodsList;
    var cartList = this.data.cartList;
    console.log("goodsList ", goodsList);
    goodsList[index].num = event.detail;
    // 当商品的选购数量改变时，同步购物车的数量
    var tag = 0;
    for (let j = 0; j < cartList.length; j++) {
      if (goodsList[index].goodsid == cartList[j].goodsid) {
        cartList[j].num = goodsList[index].num;
        tag++;
        break;
      }
    }
    if (tag == 0) {
      cartList.push(goodsList[index])
    }
    const uniqueCartList = cartList.filter((item, index, self) => {
      return index === self.findIndex(obj => obj.goodsid === item.goodsid) && item.num > 0;
    });
    this.setData({
      goodsList: goodsList,
      cartList: uniqueCartList,
      cartLength: uniqueCartList.length
    })
    console.log("uniqueCartList", uniqueCartList)
    console.log("cartLength", this.data.cartLength)
    this.sumAmount();
  },
  // 当在购物车数量变化时
  onCartStepperChange(event) {
    console.log("onCartStepperChange event", event);
    let index = event.currentTarget.dataset.index;
    var cartList = this.data.cartList;
    cartList[index].num = event.detail;

    const uniqueCartList = cartList.filter((item, index, self) => {
      return item.num > 0;
    });
    // 当购物车中的数量改变时，同步商品的下标
    var goodsList = this.data.goodsList;
    console.log(goodsList)
    for (let j = 0; j < goodsList.length; j++) {
      if (cartList[index].goodsId == goodsList[j].goodsId) {
        goodsList[j].num = cartList[index].num;
        break;
      }
    }
    this.setData({
      cartList: uniqueCartList,
      goodsList: goodsList
    })
    this.sumAmount();
  },
  // 计算总价
  sumAmount() {
    var cartList = this.data.cartList.map(item => ({
      ...item,
      userId: this.data.userId // 确保每个购物车项都有 userId
    }));
    var amount = 0;
    for (let i = 0; i < cartList.length; i++) {
      const item = cartList[i];
      amount += item.num * item.goodsPrice;
    }

    this.setData({
      amount: amount,
      cartLength: cartList.length
    })
    wx.setStorageSync('cartList-' + this.data.campId, this.data.cartList)
  },
  // 客服
  onCustomer() {
    wx.navigateTo({
      url: '../customerService/customerService',
    })
  },
  // 弹出购物车页面
  onShowCart() {
    this.setData({
      showCart: true // 设置show为true，以显示弹出层
    });
  },
  onGoorder() {
    this.setData({
      showPopup: true // 设置show为true，以显示弹出层
    });



  },

  onClose() {
    this.setData({
      showPopup: false, // 关闭弹出层时设置show为false
      showCart: false, // 关闭弹出层时设置show为false
      showqrcode: false
    });
  },
  onSubmit() {
    // 在这里处理提交订单的逻辑
    // 可以访问 this.data.cartList 来获取购物车中的商品数据
    console.log("提交订单：", this.data.cartList);
    console.log("金额", this.data.amount);
    // 假设提交成功后要关闭弹出层并跳转到订单页面
    this.setData({
      showPopup: false,
      showCart: false
    });
    this.onGoorder();
  },
  onSettlement() {
    

    // 收集表单数据或其他需要提交的数据
    console.log("订单详情：", this.data.cartList);
    console.log("金额", this.data.amount);
    // 构建订单数据对象
    const orderData = {
      userId: this.data.userId, // 添加 userId
      campId: this.data.campId,
      total: this.data.amount, // 订单总金额

      orderdetailsList: this.data.cartList.map(item => ({
        goodsId: item.goodsid,
        num: item.num,
        goodsPrice: item.goodsPrice,
        // memberPrice: item.memberPrice || item.goodsPrice, // 如果有会员价则使用会员价，否则使用原价
        status: 0, // 或者其他默认状态
        userId: this.data.userId // 确保每个商品详情都有 userId
      }))
    };
    // 打印订单数据以便调试
    console.log('Order Data:', orderData);

    // 调用 addOrder 方法发送数据
    goods.addOrder(orderData)
      .then(response => {
        console.log('Response:', response); // 打印整个响应对象
        console.log('orderData:', orderData); // 打印整个响应对象
        console.log('orderId', response.msg)
        const orderId =response.msg
        console.log('orderId', orderId)
        this.generateQRCode(orderId)
        if (response.code === 200) {
          wx.showToast({
            title: '生成订单二维码',
            icon: 'success',
            duration: 2000
          });
          // 成功处理逻辑，例如关闭弹出层并重置购物车
          this.setData({
            showPopup: false,
            cartList: [],
            amount: 0,
            cartLength: 0,

          });
          wx.setStorageSync('cartList-' + this.data.campId, []);

        } else {
          wx.showToast({
            title: '订单提交失败',
            icon: 'none',
            duration: 2000
          });
        }
      })
      .catch(error => {
        console.error('Error adding order:', error);
        wx.showToast({
          title: '订单提交失败，请稍后再试',
          icon: 'none',
          duration: 2000
        });
      });
  },
  

  getAddress() {
    wx.getLocation({
      type: 'gcj02',
      success: (res) => {
        console.log(res, "返回的数据")
        this.setData({
          latitude: res.latitude,
          longitude: res.longitude,

        })
        wx.chooseLocation({
          longitude: this.data.longitude,
          latitude: this.data.latitude,
          success: (res) => {
            this.setData({
              address: res.address, // 设置详细地址
            });
            console.log("chooseLocation返回的数据", res)
            console.log("getProvinceFromAddress返回的数据",
              this.getProvinceFromAddress(res.address))
          }
        })
      }
    })
  },

  
  //生成二维码
  generateQRCode: function (text) {
    console.log("orderId11111", text);
     const orderId = text
    wx.request({
      url: 'http://localhost:8080/wechat/goods/download-qr-code', // 后端API的正确URL
      method: 'GET',
      data: {
        text: text
      },
      responseType: 'arraybuffer', // 设置响应类型为arraybuffer以处理二进制数据
      success: function (res) {
        console.log("Response from server:", res); // 打印整个响应对象
        if (res.statusCode === 200) {
          console.log("Success response data:", res.data); // 打印成功响应的数据
          // 将二进制数据转换为Base64编码的字符串
          const base64 = wx.arrayBufferToBase64(res.data);
          // 创建一个Data URL，以便可以在<image>标签中使用
          const qrCodeUrl = `data:image/png;base64,${base64}`;
          this.setData({
            qrCode: qrCodeUrl, // 更新页面数据
            orderId:orderId
          });
          console.log("Updated QR Code URL:", qrCodeUrl); // 打印更新后的二维码URL
          
          // 构造要传递给 putOrder 的数据对象
          const orderData = {
            orderId: orderId,
            qrCode: qrCodeUrl
        };
        console.log("orderId11111", orderData);
          this.putQrcode(orderData)
        } 
      }.bind(this), // 使用bind(this)来保持this的上下文
      fail: function (err) {
        console.error('Request failed', err);
      }
    });
  },
  // 更新订单二维码
  putQrcode(orderData){
    console.log("1231231",orderData)
    goods.putOrder(orderData)
    this.setData({
      showqrcode: true // 设置show为true，以显示弹出层
    });
    
  },
  //地址
  getProvinceFromAddress(address) {
    // 地址字符串（示例）
    const addressStr = address;

    // 定义一个包含所有省级名称（包括自治区、直辖市等）的数组
    // 注意：这里只列出了部分示例，实际使用时需要补充完整
    const provinces = [
      '北京市', '天津市', '上海市', '重庆市', '河北省', '山西省', '辽宁省', '吉林省', '黑龙江省',
      '江苏省', '浙江省', '安徽省', '福建省', '江西省', '山东省', '河南省', '湖北省', '湖南省',
      '广东省', '海南省', '四川省', '贵州省', '云南省', '陕西省', '甘肃省', '青海省', '台湾省',
      '内蒙古自治区', '广西壮族自治区', '西藏自治区', '宁夏回族自治区', '新疆维吾尔自治区',
      '香港特别行政区', '澳门特别行政区'
    ];

    // 将地址字符串按空格分割成数组
    const addressParts = addressStr.split(' ');

    // 遍历分割后的数组，查找匹配的省级名称
    for (let i = 0; i < addressParts.length; i++) {
      const part = addressParts[i];
      console.log("part", part)
      for (let j = 0; j < provinces.length; j++) {
        const item = provinces[j];

        if (part.includes(item)) {
          return item; // 找到匹配的省级名称，返回
        }
      }
    }
    // 如果没有找到匹配的省级名称，返回null或空字符串
    return null; // 或 return '';
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})